/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package facades;

import entities.Almacen;
import entities.EnvioTraspasoMercancia;
import entities.LineaEnvioTraspasoMercancia;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author damfercer
 */
@Stateless
public class EnvioTraspasoMercanciaFacade extends AbstractFacade<EnvioTraspasoMercancia> {
    @PersistenceContext(unitName = "CorporatePU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public EnvioTraspasoMercanciaFacade() {
        super(EnvioTraspasoMercancia.class);
    }
    
    
    public List<EnvioTraspasoMercancia> getEnviosRealizadosPorAlmacen(Almacen a){
        Query q=em.createNamedQuery("EnvioTraspasoMercancia.findByAlmacenEnvio",EnvioTraspasoMercancia.class);
        q.setParameter("idAlmacen", a.getIdAlmacen());
        return q.getResultList();
    }
    
    public List<EnvioTraspasoMercancia> getEnviosPendientesDeRecepcionarEnAlmacen(Almacen a){
        List<EnvioTraspasoMercancia> enviosPendientes=new ArrayList<EnvioTraspasoMercancia>();
        Query q=em.createNamedQuery("EnvioTraspasoMercancia.findByAlmacenDestino",EnvioTraspasoMercancia.class);
        q.setParameter("idAlmacen", a.getIdAlmacen());
        List<EnvioTraspasoMercancia> envios= q.getResultList();
        for (EnvioTraspasoMercancia envioTraspaso : envios) {
            if(envioTraspaso.getRecepcionTraspasoMercanciaList()==null || envioTraspaso.getRecepcionTraspasoMercanciaList().isEmpty()){
                enviosPendientes.add(envioTraspaso);
            }
            else{
               for(LineaEnvioTraspasoMercancia lineaEnvioTraspasoMercancia : envioTraspaso.getLineaEnvioTraspasoMercanciaList()) {
                   if(lineaEnvioTraspasoMercancia.getLineaRecepcionTraspasoMercanciaList()==null || lineaEnvioTraspasoMercancia.getLineaRecepcionTraspasoMercanciaList().isEmpty()){
                       enviosPendientes.add(envioTraspaso);
                       break;
                   }
               }
            }
        }
        return enviosPendientes;
    }
    
    public List<EnvioTraspasoMercancia> getEnviosTraspasoMercancia(List<Almacen> almacenesOrigen){
        Query q=em.createNamedQuery("EnvioTraspasoMercancia.findByAlmacenesEnvio");
        q.setParameter("almacenes", almacenesOrigen);
        return q.getResultList();
    }
    
    public List<EnvioTraspasoMercancia> getEnviosTraspasoMercanciaDestino(List<Almacen> almacenesDestino){
        Query q=em.createNamedQuery("EnvioTraspasoMercancia.findEnviosPendientesDeRecepcion");
        q.setParameter("almacenes", almacenesDestino);
        return q.getResultList();
    }
}
